Projeto Final
Estatística Descritiva e Construção de Dashboards
Raquel Marques / Marcus Dias / Ricardo Nascimento Ferreira
12/15/2021
Projeto Final
Carregando pacotes
Importação do banco do ENADE/INEP
dataset <<- read_csv2("MICRODADOS_ENADE_2017.txt")
Seleção das Variáveis Desejadas
ds.filtered <<- dataset %>% dplyr::select(
NT_OBJ_FG,
CO_GRUPO,
CO_REGIAO_CURSO,
QE_I02,
CO_TURNO_GRADUACAO
)
NT_OBJ_FG | Quantitativa Discreta | Nota bruta na parte objetiva da formação geral. (valor de 0 a 100) CO_GRUPO | Qualitativa Nominal | Código da área de enquadramento do curso no Enade CO_REGIAO_CURSO | Qualitativa Nominal | Código da região de funcionamento do curso QE_I02 | Qualitativa Nominal | Qual é a sua cor ou raça? CO_TURNO_GRADUACAO | Qualitativa Nominal | Código do turno de graduação
Seleção do Curso Desejado
ds.engenharia <<- ds.filtered %>% filter(CO_GRUPO == 6306)
Análise Descritiva das Variáveis (raw data)
s <<- summary(ds.engenharia)
d <<- describe(ds.engenharia)
Variáveis Obrigatorias
Região
unique(d$Regiao) %>% kbl %>% kable_material_dark(full_width = F)
|
|
|
|
|
x
|
|
n
|
8699
|
|
missing
|
0
|
|
distinct
|
5
|
|
|
x
|
|
Centro-Oeste
|
|
Nordeste
|
|
Norte
|
|
Sudeste
|
|
Sul
|
|
|
|
|
|
x
|
|
L1
|
Centro-Oeste
|
|
L2
|
Nordeste
|
|
L3
|
Norte
|
|
L4
|
Sudeste
|
|
L5
|
Sul
|
|
H5
|
Centro-Oeste
|
|
H4
|
Nordeste
|
|
H3
|
Norte
|
|
H2
|
Sudeste
|
|
H1
|
Sul
|
|
Raça
unique(d$Raca) %>% kbl %>% kable_material_dark(full_width = F)
|
|
|
|
|
x
|
|
n
|
8148
|
|
missing
|
551
|
|
distinct
|
6
|
|
|
x
|
|
Amarela
|
|
Branca
|
|
Indígena
|
|
Não quero declarar
|
|
Parda
|
|
Preta
|
|
|
x
|
|
240
|
|
4715
|
|
26
|
|
297
|
|
2331
|
|
539
|
|
|
|
|
x
|
|
L1
|
Amarela
|
|
L2
|
Branca
|
|
L3
|
Indígena
|
|
L4
|
Não quero declarar
|
|
L5
|
Parda
|
|
H5
|
Branca
|
|
H4
|
Indígena
|
|
H3
|
Não quero declarar
|
|
H2
|
Parda
|
|
H1
|
Preta
|
|
Turno
unique(d$Turno) %>% kbl %>% kable_material_dark(full_width = F)
|
|
|
|
|
x
|
|
n
|
8698
|
|
missing
|
1
|
|
distinct
|
4
|
|
|
x
|
|
Integral
|
|
Matutino
|
|
Noturno
|
|
Vespertino
|
|
|
|
Nota
unique(d$Nota) %>% kbl %>% kable_material_dark(full_width = F)
|
|
|
|
|
x
|
|
n
|
7639
|
|
missing
|
1060
|
|
distinct
|
9
|
|
Info
|
0.969
|
|
Mean
|
59.5
|
|
Gmd
|
23.6
|
|
|
x
|
|
0.0
|
|
12.5
|
|
25.0
|
|
37.5
|
|
50.0
|
|
62.5
|
|
75.0
|
|
87.5
|
|
100.0
|
|
|
x
|
|
59
|
|
190
|
|
521
|
|
955
|
|
1482
|
|
1733
|
|
1498
|
|
926
|
|
275
|
|
|
|
|
x
|
|
L1
|
0.0
|
|
L2
|
12.5
|
|
L3
|
25.0
|
|
L4
|
37.5
|
|
L5
|
50.0
|
|
H5
|
50.0
|
|
H4
|
62.5
|
|
H3
|
75.0
|
|
H2
|
87.5
|
|
H1
|
100.0
|
|
Data Quality
Missing
summary_na = ds.engenharia %>%
select(everything()) %>%
summarise_all(list(~ sum(is.na(.))))
summary_na %>% kbl %>% kable_material_dark(full_width = F)
|
Curso
|
Nota
|
Regiao
|
Raca
|
Turno
|
|
0
|
1060
|
0
|
551
|
1
|
Removendo todos os NAs
ds.eng.final = ds.engenharia %>% na.omit()
d3 <- describe(ds.eng.final)
#Verificando se todos os NA's foram de fato removidos
summary_final.nas=ds.eng.final %>%
select(everything()) %>%
summarise_all(list(~sum(is.na(.))))
summary_final.nas %>% kbl %>% kable_material_dark(full_width = F)
|
Curso
|
Nota
|
Regiao
|
Raca
|
Turno
|
|
0
|
0
|
0
|
0
|
0
|
#Quatidade De Linhas Do Banco Original
dim(ds.engenharia)[1]
## [1] 8699
#Quatidade De Linhas Do Banco sem os NAS
dim(ds.eng.final)[1]
## [1] 7576
#observaçoes removidas
dim(ds.engenharia)[1] - dim(ds.eng.final)[1]
## [1] 1123
( dim(ds.engenharia)[1] - dim(ds.eng.final)[1] ) / dim(ds.engenharia)[1]
## [1] 0.1290953
Foram removidos em torno de 13% do banco de dados original devido à retirada de observações faltantes.
Análise Descritiva das Variáveis (clean data)
ds.eng.final %>%
select(Nota) %>%
summarise(
quantidade = n(),
media = mean(Nota),
mediana = median(Nota),
moda = Mode(Nota),
cv = sd(Nota) / media * 100,
assimetria = skewness(Nota),
curtose = kurtosis(Nota)
) %>%
arrange(desc(mediana)) %>%
kbl %>% kable_material_dark(full_width = F)
|
quantidade
|
media
|
mediana
|
moda
|
cv
|
assimetria
|
curtose
|
|
7576
|
59.5301
|
62.5
|
62.5
|
35.40857
|
-0.2893871
|
-0.3265427
|
#Estatísticas resumo
summary(ds.eng.final$Nota)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00 50.00 62.50 59.53 75.00 100.00
Gráficos de Análise Descritiva para a Variável Nota dos Alunos de Engenharia
g_hist = ggplot(ds.eng.final, aes(x = Nota)) +
geom_histogram(color = "black",
fill = "lightblue",
bins = 10,
aes(y = (..count..) / sum(..count..))) +
ggtitle("Histograma da nota dos alunos de Engenharia") +
xlab("nota") +
ylab("Frequência relativa")
g_densidade = ggplot(ds.eng.final, aes(x = Nota)) +
geom_density(col = 2, size = 1, aes(y = 30 * (..count..) / sum(..count..))) +
ggtitle("Curva de densidade da nota dos alunos de Engenharia") +
xlab("nota") +
ylab("Frequência relativa")
g_hist_densidade = ggplot(ds.eng.final, aes(x = Nota)) +
geom_histogram(color = "black",
fill = "lightblue",
bins = 10,
aes(y = (..count..) / sum(..count..))) +
geom_density(col = 2, size = 1, aes(y = 30 * (..count..) / sum(..count..))) +
ggtitle("Histograma e curva de densidade da nota dos alunos de Engenharia") +
xlab("Nota") +
ylab("Frequência relativa")
grid.arrange(g_hist,
g_densidade,
g_hist_densidade,
nrow = 3,
ncol = 1)

Comparando as médias de Turno por Raça
ds.eng.final_mod1 = ds.eng.final %>%
select(Raca, Nota, Turno) %>%
group_by(Turno, Raca) %>%
summarise(
quantidade = n(),
media = mean(Nota, na.rm = T),
mediana = median(Nota, na.rm = T),
cv = sd(Nota, na.rm = T) / media * 100,
amplitude_interquartil = IQR(Nota)
) %>%
arrange(desc(mediana))
|
Turno
|
Raca
|
quantidade
|
media
|
mediana
|
cv
|
amplitude_interquartil
|
|
Vespertino
|
Indígena
|
2
|
81.25000
|
81.25
|
10.87857
|
6.250
|
|
Vespertino
|
Não quero declarar
|
3
|
62.50000
|
75.00
|
34.64102
|
18.750
|
|
Vespertino
|
Branca
|
42
|
56.25000
|
56.25
|
28.30130
|
12.500
|
|
Vespertino
|
Parda
|
85
|
50.44118
|
50.00
|
36.16456
|
25.000
|
|
Vespertino
|
Preta
|
6
|
47.91667
|
43.75
|
60.43322
|
40.625
|
|
Vespertino
|
Amarela
|
2
|
37.50000
|
37.50
|
0.00000
|
0.000
|
|
Turno
|
Raca
|
quantidade
|
media
|
mediana
|
cv
|
amplitude_interquartil
|
|
Matutino
|
Não quero declarar
|
56
|
68.30357
|
75.0
|
32.73056
|
28.125
|
|
Matutino
|
Amarela
|
43
|
57.84884
|
62.5
|
35.60670
|
37.500
|
|
Matutino
|
Branca
|
559
|
62.90250
|
62.5
|
34.35164
|
25.000
|
|
Matutino
|
Indígena
|
5
|
62.50000
|
62.5
|
24.49490
|
12.500
|
|
Matutino
|
Parda
|
383
|
56.85379
|
62.5
|
38.98203
|
37.500
|
|
Matutino
|
Preta
|
89
|
58.56742
|
62.5
|
36.48720
|
25.000
|
|
Turno
|
Raca
|
quantidade
|
media
|
mediana
|
cv
|
amplitude_interquartil
|
|
Integral
|
Amarela
|
98
|
63.13776
|
62.50
|
28.05227
|
25
|
|
Integral
|
Branca
|
2428
|
62.75741
|
62.50
|
32.12889
|
25
|
|
Integral
|
Não quero declarar
|
150
|
62.66667
|
62.50
|
36.31885
|
25
|
|
Integral
|
Parda
|
972
|
61.81842
|
62.50
|
33.63136
|
25
|
|
Integral
|
Preta
|
215
|
61.33721
|
62.50
|
33.26363
|
25
|
|
Integral
|
Indígena
|
10
|
52.50000
|
56.25
|
35.13642
|
25
|
|
Turno
|
Raca
|
quantidade
|
media
|
mediana
|
cv
|
amplitude_interquartil
|
|
Noturno
|
Indígena
|
6
|
58.33333
|
62.5
|
32.26169
|
18.75
|
|
Noturno
|
Não quero declarar
|
64
|
59.37500
|
62.5
|
38.25320
|
25.00
|
|
Noturno
|
Amarela
|
83
|
53.16265
|
50.0
|
45.98800
|
37.50
|
|
Noturno
|
Branca
|
1367
|
55.50475
|
50.0
|
37.51674
|
37.50
|
|
Noturno
|
Parda
|
718
|
53.62117
|
50.0
|
38.77546
|
25.00
|
|
Noturno
|
Preta
|
190
|
53.48684
|
50.0
|
38.47323
|
37.50
|
Tabulação Cruzada
#Tabulação cruzada
table(ds.eng.final$Turno,
ds.eng.final$Raca) %>%
kbl %>% kable_material_dark(full_width = F)
|
|
Amarela
|
Branca
|
Indígena
|
Não quero declarar
|
Parda
|
Preta
|
|
Integral
|
98
|
2428
|
10
|
150
|
972
|
215
|
|
Matutino
|
43
|
559
|
5
|
56
|
383
|
89
|
|
Noturno
|
83
|
1367
|
6
|
64
|
718
|
190
|
|
Vespertino
|
2
|
42
|
2
|
3
|
85
|
6
|
#Tabulaçãoo cruzada proporção
prop.table(table(
ds.eng.final$Turno,
ds.eng.final$Raca
)) %>%
kbl %>% kable_material_dark(full_width = F)
|
|
Amarela
|
Branca
|
Indígena
|
Não quero declarar
|
Parda
|
Preta
|
|
Integral
|
0.0129356
|
0.3204857
|
0.001320
|
0.0197994
|
0.1282999
|
0.0283791
|
|
Matutino
|
0.0056758
|
0.0737856
|
0.000660
|
0.0073918
|
0.0505544
|
0.0117476
|
|
Noturno
|
0.0109556
|
0.1804382
|
0.000792
|
0.0084477
|
0.0947730
|
0.0250792
|
|
Vespertino
|
0.0002640
|
0.0055438
|
0.000264
|
0.0003960
|
0.0112196
|
0.0007920
|
Nota-se que 50% dos alunos de Engenharia são de brancos, com 32% estudando em turno Integral e 18% no turno Noturno.
#assimetria e curtose - Turno
ds.eng.final_mod2 = ds.eng.final %>%
select(Turno,Nota,Raca) %>%
group_by(Turno) %>%
#filter(raca=="Branca") %>%
summarise( quantidade=n(),
media = mean(Nota),
mediana = median(Nota),
cv=sd(Nota)/media*100,
amplitude_interquartil=IQR(Nota),
assimetria=skewness(Nota),
curtose=kurtosis(Nota)
) %>%
arrange(desc(cv))
ds.eng.final_mod2 %>% kbl %>% kable_material_dark(full_width = F)
|
Turno
|
quantidade
|
media
|
mediana
|
cv
|
amplitude_interquartil
|
assimetria
|
curtose
|
|
Noturno
|
2428
|
54.81878
|
50.0
|
38.28903
|
37.5
|
-0.0846655
|
-0.4732720
|
|
Matutino
|
1135
|
60.59471
|
62.5
|
36.24448
|
25.0
|
-0.3142080
|
-0.4460625
|
|
Vespertino
|
140
|
52.58929
|
50.0
|
34.97707
|
25.0
|
-0.0880726
|
-0.4076159
|
|
Integral
|
3873
|
62.42254
|
62.5
|
32.64733
|
25.0
|
-0.4326055
|
-0.0185418
|
#assimetria e curtose - Raca
ds.eng.final_mod3 = ds.eng.final %>%
select(Turno,Nota,Raca) %>%
group_by(Raca) %>%
#filter(raca=="Branca") %>%
summarise( quantidade=n(),
media = mean(Nota),
mediana = median(Nota),
cv=sd(Nota)/media*100,
amplitude_interquartil=IQR(Nota),
assimetria=skewness(Nota),
curtose=kurtosis(Nota)
) %>%
arrange(desc(cv))
ds.eng.final_mod3 %>% kbl %>% kable_material_dark(full_width = F)
|
Raca
|
quantidade
|
media
|
mediana
|
cv
|
amplitude_interquartil
|
assimetria
|
curtose
|
|
Parda
|
2158
|
57.76182
|
62.5
|
36.87214
|
37.50
|
-0.1702805
|
-0.4509037
|
|
Amarela
|
226
|
58.24115
|
62.5
|
36.66857
|
25.00
|
-0.1568370
|
-0.2550657
|
|
Preta
|
500
|
57.70000
|
62.5
|
36.41962
|
37.50
|
-0.1679807
|
-0.6031054
|
|
Não quero declarar
|
273
|
63.04945
|
62.5
|
36.05273
|
25.00
|
-0.6131699
|
0.1548882
|
|
Branca
|
4396
|
60.45837
|
62.5
|
34.39455
|
25.00
|
-0.3501950
|
-0.2365703
|
|
Indígena
|
23
|
58.69565
|
62.5
|
31.08409
|
31.25
|
-0.0777072
|
-1.1225608
|
Gráficos adicionais
Histogramas
#Histograma
grafico_hist.turno= ggplot(ds.eng.final, aes(x = Nota, fill = Turno)) +
geom_histogram(binwidth = 10) +
ggtitle("Gráfico de Histograma da Nota por Turno") +
ylab("Frequência") +
xlab("Notas")
ggplotly(grafico_hist.turno)
grafico_hist.raca= ggplot(ds.eng.final, aes(x = Nota, fill = Raca)) +
geom_histogram(binwidth = 10) +
ggtitle("Gráfico de Histograma da Nota por Raça") +
ylab("Frequência") +
xlab("Notas") +
guides(fill=guide_legend(title="Raça"))
ggplotly(grafico_hist.raca)
grafico_hist.raca.turno= ggplot(ds.eng.final, aes(x = Nota, fill = Turno)) +
geom_histogram(binwidth = 10) +
ggtitle("Gráfico de Histograma da Nota por Raça e Turno") +
ylab("Frequência") +
xlab("Notas") +
facet_grid(~ Raca) +
guides(fill=guide_legend(title="Raça"))
ggplotly(grafico_hist.raca.turno)
Esse gráfico nos permite ver que a frequência de alunos de raça branca é muito maior do que as demais, sendo a parda a segunda maior em frequencia.
BoxSplots
grafico_bp.raca= ggplot(ds.eng.final, aes(x = Raca, y = Nota, fill = Raca)) +
geom_boxplot() +
ggtitle("Gráfico de Box-plot da Nota por Raça") +
xlab("Raça") +
ylab("Notas") +
guides(fill=guide_legend(title="Raça"))
ggplotly(grafico_bp.raca)
Nota-se que a média de notas por raça dos alunos de Engenharia é praticamente a mesma, contudo, alunos brancos e amarelos possuem uma variação de nota menor comparado aos pardos e negros. Baseado neste gráfico, poseria se desconfiar que os alunos brancos devem ter notas um pouco maiores do que os alunos negros.
grafico_bp.turno= ggplot(ds.eng.final, aes(x = Turno, y = Nota, fill = Turno)) +
geom_boxplot() +
ggtitle("Gráfico de Box-plot da Nota por Turno") +
xlab("Turno") +
ylab("Notas")
ggplotly(grafico_bp.turno)
Nota-se que os alunos que cursam Engenharia no turno Integral e Matutino possuem média de notas mais altas e um variação de notas menor do que os que que estudam à noite. Os alunos que estudam à tarde possuem uma distribuição semelhante àquelas que estudam de manhã ou integral, mas as notas são, em geral, menores do que a dos demais turnos. Pode-se então desconfiar que os alunos da manhã e integral vão ter notas maiores do que os que estudam tarde ou noite.
grafico_bp.raca.turno= ggplot(ds.eng.final, aes(x = Turno, y = Nota, fill = Turno)) +
geom_boxplot() +
ggtitle("Gráfico de Box-plot da Nota por Raça e Turno") +
xlab("Turno") +
ylab("Notas") +
facet_grid(~ Raca) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
guides(fill=guide_legend(title="Turno"))
ggplotly(grafico_bp.raca.turno)
grafico_bp.raca.regiao= ggplot(ds.eng.final, aes(x = Regiao, y = Nota, fill = Regiao)) +
geom_boxplot() +
ggtitle("Gráfico de Box-plot da Nota por Raça e Região") +
xlab("Região") +
ylab("Notas") +
facet_grid(~ Raca) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
guides(fill=guide_legend(title="Região"))
ggplotly(grafico_bp.raca.regiao)
Conclusões
- Considerando observações de Nota sem NA (d_sem_NA$Nota), 25% das observações tiraram nota até 50.0, 50% das observações tiraram nota até 59.5 e 25% tiraram nota superior a 75.0;
- Centro-Oeste tem a menor particiação no Enade em questão;
- Indigenas tem a menor participação;
- Turno Vespertino foi o menos procurado;
- Brancos são mais presentes no Enade;
- Brancos e Amarelos tem desempenho similar e ambos tem melhores notas que Indígenas;
- Amarelos e Indigenas são os menos presentes no Enad;
- Os Turnos mais procurados são Integral e Noturno;
- O Turno Matutino tem média de Notas superior ao Turno Noturno;
- A média de Notas dos Turnos Integral e Matunino São similares;
- Raça Preta tem média de notas melhores na Região Sul;